package com.px.auditRecord.service.impl;

import java.util.List;

import com.px.auditRecord.domain.AuditRecordUser;
import com.px.auditRecord.domain.FlightUserAuditRecordUser;
import com.px.auditRecord.mapper.FlightUserAuditRecordUserMapper;
import com.px.common.constant.Constants;
import com.px.common.core.redis.RedisCache;
import com.px.common.exception.ServiceException;
import com.px.common.utils.SecurityUtils;
import com.px.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.px.auditRecord.mapper.ForRecordUserMapper;
import com.px.auditRecord.domain.ForRecordUser;
import com.px.auditRecord.service.IForRecordUserService;

/**
 * 备案详情Service业务层处理
 * 
 * @author WRJ
 * @date 2024-08
 */
@Service
public class ForRecordUserServiceImpl implements IForRecordUserService 
{
    @Autowired
    private ForRecordUserMapper forRecordUserMapper;

    @Autowired
    private RedisCache redisCache;

    @Autowired
    private FlightUserAuditRecordUserMapper flightUserAuditRecordUserMapper;

    /**
     * 查询备案详情
     * 
     * @param id 备案详情主键
     * @return 备案详情
     */
    @Override
    public ForRecordUser selectForRecordUserById(Integer id)
    {
        return forRecordUserMapper.selectForRecordUserById(id);

    }

    @Override
    public ForRecordUser selectForRecordUserByUserId(Integer userId)
    {
        //有绑定关系的直接返回绑定关系
        ForRecordUser forRecordUser = forRecordUserMapper.selectForRecordUserByUserId(userId);
        if(StringUtils.isNotNull(forRecordUser)){
            forRecordUser.setAuditState("1");
            forRecordUser.setAuditRemark("");
            return forRecordUser;
        }
        //没有绑定关系的查询审核记录- 没有审核记录返回null
        ForRecordUser auditRecord = forRecordUserMapper.selectAuditRecordUserById(userId);
        if(StringUtils.isNotNull(auditRecord))
            return auditRecord;
        return new ForRecordUser();
    }

    /**
     * 查询备案详情列表
     * 
     * @param forRecordUser 备案详情
     * @return 备案详情
     */
    @Override
    public List<ForRecordUser> selectForRecordUserList(ForRecordUser forRecordUser)
    {
        return forRecordUserMapper.selectForRecordUserList(forRecordUser);
    }

    /**
     * 新增备案详情
     * 
     * @param forRecordUser 备案详情
     * @return 结果
     */
    @Override
    public int insertForRecordUser(ForRecordUser forRecordUser)
    {
        return forRecordUserMapper.insertForRecordUser(forRecordUser);
    }

    /**
     * 修改备案详情
     * 
     * @param forRecordUser 备案详情
     * @return 结果
     */
    @Override
    public int updateForRecordUser(ForRecordUser forRecordUser)
    {
        return forRecordUserMapper.updateForRecordUser(forRecordUser);
    }

    /**
     * 批量删除备案详情
     * 
     * @param ids 需要删除的备案详情主键
     * @return 结果
     */
    @Override
    public int deleteForRecordUserByIds(Integer[] ids)
    {
        return forRecordUserMapper.deleteForRecordUserByIds(ids);
    }

    /**
     * 删除备案详情信息
     * 
     * @param id 备案详情主键
     * @return 结果
     */
    @Override
    public int deleteForRecordUserById(Integer id)
    {
        return forRecordUserMapper.deleteForRecordUserById(id);
    }

    @Override
    public ForRecordUser selectForRecordUserByIdcard(String idCard) {
        return forRecordUserMapper.selectForRecordUserByIdcard(idCard);
    }

    @Override
    public int forBinding(AuditRecordUser auditRecordUser) {
        /***
         * 1、验证码判断
         * 2、查询身份证-看手机号是否一致
         * 3、插入flight_user_for_record_user表
         */
        //验证码为空
        if(StringUtils.isNull(auditRecordUser.getCode()))
            throw new ServiceException("验证码为空!");

        //验证码失效
        if(StringUtils.isNull(redisCache.getCacheObject(auditRecordUser.getPhonenumber()+ Constants.RESET)))
            throw new ServiceException("验证码失效!");

        //验证码错误
        if(!auditRecordUser.getCode().equals(redisCache.getCacheObject(auditRecordUser.getPhonenumber()+Constants.RESET)))
            throw new ServiceException("验证码错误!");

        ForRecordUser forRecordUser = forRecordUserMapper.selectForRecordUserByIdcard(auditRecordUser.getIdcard());
        if(StringUtils.isNull(forRecordUser))
            throw new ServiceException("该身份证号未完成备案，无法绑定!");
        if(forRecordUser.getPhonenumber().equals(auditRecordUser.getPhonenumber()))
            throw new ServiceException("输入手机号与备案手机号不一致，绑定失败!");

        //插入绑定关系
        FlightUserAuditRecordUser flightUserAuditRecordUser = new FlightUserAuditRecordUser();
        flightUserAuditRecordUser.setAuditRecordUserId(auditRecordUser.getId());
        flightUserAuditRecordUser.setUserId(SecurityUtils.getUserId().intValue());
        return flightUserAuditRecordUserMapper.insertFlightUserAuditRecordUser(flightUserAuditRecordUser);

    }

}
